package com.zp.self.module.level_4_算法练习.数据结构.hash表;

import java.util.HashMap;
import java.util.Map;

/**
 * @author By ZengPeng
 */
public class 力扣_205_同构字符串 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_205_同构字符串().isIsomorphic("egg","add"));//true
        System.out.println(new 力扣_205_同构字符串().isIsomorphic("foo","bar"));//false
        System.out.println(new 力扣_205_同构字符串().isIsomorphic("paper","title"));//true
        System.out.println(new 力扣_205_同构字符串().isIsomorphic("badc","baba"));//false
    }

    /**
     * 题目：给定两个字符串 s 和 t，判断它们是否是同构的。
     * 如果 s 中的字符可以按某种映射关系替换得到 t ，那么这两个字符串是同构的。
     * 每个出现的字符都应当映射到另一个字符，同时不改变字符的顺序。不同字符不能映射到同一个字符上，相同字符只能映射到同一个字符上，字符可以映射到自己本身。
     *
     *示例 1:
     * 输入：s = "egg", t = "add"
     * 输出：true
     *
     * 分析：
     *      1.同时遍历，HashMap存储映射关系
     *          <p,t>  <b,b>
     *          <a,i>  <a,a>
     *          <e,l>  <d,b>
     *          <r,e>
     * 边界值注意：
     *      1.
     **/
    public boolean isIsomorphic(String s, String t) {
        if(s==null && t==null) return  true;
        if(s==null || t==null) return  false;
        Map<Character,Character> map = new HashMap<>();
        char sc,tc;//"paper","title"   "badc","baba
        for (int i = 0; i < s.length(); i++) {
            sc= s.charAt(i);
            tc = t.charAt(i);
            if(map.get(sc)!=null ){
                if(map.get(sc) !=tc)
                    return false;
            }else{
               if(map.containsValue(tc))return false;
                map.put(sc,tc) ;
            }
        }
        return  true;
    }
}
